Node.js Streams
最早接触并使用 Node.js 的 Stream 流是在 gulp 中, gulp.src().pipe(someFunction).pipe(gulp.dest())
在 gulp 中, 使用的不是完整的 Stream, 而是自定义的 Vinyl 对象, 需要使用 Object Mode
'streaming' here refers specifically to the Vinyl file objects it generates—which are passed through plugins with objectMode
.
通俗来说, pipe() 相当于融合了 on('data') 和 on('end') 两个事件
Readable -> Transform -> Writeable
创建 Stream 流
Stream 流的数据以 null
结尾
const { Readable } = require("stream");
const inStream = new Readable({
read(size) {
this.push(String.fromCharCode(this.currentCharCode++));
if (this.currentCharCode > 90) {
this.push(null);
}
},
});
inStream.currentCharCode = 65;
inStream.pipe(process.stdout);
// 输出 ABCDEFGHIJKLMNOPQRSTUVWXYZ
const { Transform } = require("stream");
const upperCaseTr = new Transform({
transform(chunk, encoding, callback) {
this.push(chunk.toString().toUpperCase());
callback();
},
});
process.stdin.pipe(upperCaseTr).pipe(process.stdout);
// 将输入转换为大写